package com.mofang.ticketing.user.serve.account.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mofang.ticketing.user.mapping.entity.*;
import com.mofang.ticketing.user.serve.account.dto.request.MerchantAccountListPageReqDTO;
import com.mofang.ticketing.user.serve.account.dto.request.PlatformAccountListPageReqDTO;
import com.mofang.ticketing.user.serve.account.dto.response.MerchantAccountListPageRespDTO;
import com.mofang.ticketing.user.serve.account.dto.response.PlatformAccountListPageRespDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author LGC
 * @date 2023/3/15 9:13
 */
public interface AccountMapper {

    /**
     * 平台账号列表
     *
     * @param page
     * @param dto
     * @return
     */
    IPage<PlatformAccountListPageRespDTO> selectPlatformAccountListPage(Page<PlatformAccountListPageRespDTO> page, @Param("dto") PlatformAccountListPageReqDTO dto);

    /**
     * 商户账号列表
     *
     * @param page
     * @param dto
     * @return
     */
    IPage<MerchantAccountListPageRespDTO> selectMerchantAccountListPage(Page<MerchantAccountListPageRespDTO> page, @Param("dto") MerchantAccountListPageReqDTO dto);

    /**
     * 查询用户所属商户 商户管理员用户可存在多个商户，商户成员用户只存在一个商户里
     *
     * @param userId
     * @return
     */
    List<MerchantInfoDO> selectUserBelongMerchant(@Param("userId") Long userId, @Param("belong") Integer belong);

    /**
     * 查询用户商户关联关系 商户管理员用户可存在多个商户，商户成员用户只存在一个商户里
     *
     * @param userId
     * @param belong
     * @return
     */
    List<SysUserRoleDO> selectUserMerchant(@Param("userId") Long userId, @Param("belong") Integer belong);


    /**
     * 查询用户所属项目 一个项目成员用户只属于一个项目
     *
     * @param userId
     * @return
     */
    ProjectInfoDO selectUserBelongProject(@Param("userId") Long userId, @Param("belong") Integer belong);


    /**
     * 获取角色所有权限key
     *
     * @param roles
     * @return
     */
    Set<String> selectPerKeyByRoleId(@Param("roles") Set<Long> roles);


    /**
     * 根据账号和账号类型获取账号
     *
     * @param account
     * @param belong
     * @return
     */
    SysUserDO selectUserByAccountAndBelong(@Param("account") String account,@Param("belong") Integer belong);


}
